/*
 * @Description  : verilog code from HUIYU
 *  该代码为对应的串口top代码，1bit开始位+8bit数据位+1bit结束位*8
 * @authorName   : GuoJi
 * @github       : https://github.com/guoji-kk
 * @gitee        : https://gitee.com/guoji13663585559
 * @email        : 13663585559@163.com
 * @version      : 1.0
 * @Date         : 2023-04-14 11:27:57
 * @LastEditTime : 2023-04-20 19:12:08
 */


module uart_32bit(
    input           sys_clk,          //外部50M时钟
    input           sys_rst_n,        //外部复位信号，低有效
    //uart接口
    input           uart_rxd,         //UART接收端口
    output          uart_txd         //UART发送端口
    );
    
//parameter define
parameter  CLK_FREQ = 12000000;       //定义系统时钟频率
parameter  UART_BPS = 115200;         //定义串口波特率
    
//wire define   
wire        uart_en_w;                 //UART发送使能
wire [7:0]  uart_data_w;               //UART发送数据
wire [31:0] ndata_32bit;               //32bit传输
//*****************************************************
//**                    main code
//*****************************************************
//conditional compile 
`define  BIT32   //修改为BIT8确定为8bit通信
`ifdef   BIT8  
uart_recv #(                          //串口接收模块
    .CLK_FREQ       (CLK_FREQ),       //设置系统时钟频率
    .UART_BPS       (UART_BPS))       //设置串口接收波特率
u_uart_recv(                 
    .sys_clk        (sys_clk), 
    .sys_rst_n      (sys_rst_n),
    
    .uart_rxd       (uart_rxd),
    .uart_done      (uart_en_w),
    .uart_data      (uart_data_w)
    );
    
uart_send #(                          //串口发送模块
    .CLK_FREQ       (CLK_FREQ),       //设置系统时钟频率
    .UART_BPS       (UART_BPS))       //设置串口发送波特率
u_uart_send(                 
    .sys_clk        (sys_clk),
    .sys_rst_n      (sys_rst_n),
     
    .uart_en        (uart_en_w),
    .uart_din       (uart_data_w),
    .uart_txd       (uart_txd)
    );
	 
`else
uart_recv #(                          //串口接收模块
    .CLK_FREQ       (CLK_FREQ),       //设置系统时钟频率
    .UART_BPS       (UART_BPS))       //设置串口接收波特率
u_uart_recv(                 
    .sys_clk        (sys_clk), 
    .sys_rst_n      (sys_rst_n),
    
    .uart_rxd       (uart_rxd),
    .uart_done      (uart_en_w),
    .uart_data      (uart_data_w)
    );
    
uart_send32 #(                          //串口发送模块
    .CLK_FREQ       (CLK_FREQ),       //设置系统时钟频率
    .UART_BPS       (UART_BPS))       //设置串口发送波特率
u_uart_send(                 
    .sys_clk        (sys_clk),
    .sys_rst_n      (sys_rst_n),
     
    .uart_en        (data_buf_done),
    .uart_din       (ndata_32bit),
    .uart_txd       (uart_txd)
    );

data_buf  u_data_buf(
    .sys_clk        (sys_clk),
    .sys_rst_n      (sys_rst_n),
    .rx_data        (uart_data_w),
    .rxd_flag       (uart_en_w),
    
    .para_data      (ndata_32bit),
    .done_flag      (data_buf_done)
);

`endif

endmodule 